// 版权所有2016 etcd作者
// 
// 根据Apache许可证2.0版（以下简称“许可证”）获得许可；
// 除非遵守许可证，否则不得使用此文件。
// 您可以通过
// 
// www.apache.org/licenses/LICENSE-2.0 
// 
// 除非适用法律要求或书面同意，否则根据许可证分发的软件
// 按“原样”分发，
// 无任何明示或暗示的保证或条件。
// 请参阅许可证，了解管理许可的特定语言和
// 许可证下的限制。

// go:build darwin 
// +build darwin 

package fileutil

import (
	"os"

	"golang.org/x/sys/unix"
)

// HFS/OSX上的Fsync将数据刷新到物理驱动器上，但驱动器
// 可能在相当长的一段时间内不会将其写入永久介质，并且可能是按顺序写入的
// 。使用F_FULLFSYNC可确保
// 物理驱动器的缓冲区也将刷新到介质中。
func Fsync(f *os.File) error {
	_, err := unix.FcntlInt(f.Fd(), unix.F_FULLFSYNC, 0)
	return err
}

// darwin平台上的Fdatasync调用fcntl（F_FULLFSYNC）在物理驱动器介质上进行实际持久化
// 。
func Fdatasync(f *os.File) error {
	return Fsync(f)
}
